﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using BolsaTalentos.BLL;

namespace InterfazBolsaTalentos.Empresa
{
    public partial class Vacantes : System.Web.UI.Page
    {
        private static List<Habilidad> HabilidadesNuevaVacante = new List<Habilidad>();

        protected void Page_Load(object sender, EventArgs e)
        {
            PoblarGridView_VacantesActivas();
            PoblarGridView_VacantesCerradas();
            PoblarDropDownList_HabilidadesDeVacante();
            PoblarTextBox_HabilidadesVacanteNueva();
            //InicializarLista();
        }

        private void InicializarLista()
        {
            if (!(this.IsPostBack)) HabilidadesNuevaVacante = new List<Habilidad>();
        }

        protected void Button_LogOff_Click(object sender, EventArgs e)
        {
            this.Session["UsuarioDeSesion"] = null;

            this.Response.Redirect("../General/Default.aspx");
        }
        protected void Button_CerrarVacante_Click(object sender, EventArgs e)
        {
            try
            {
                ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).DesactivarVacante(Convert.ToInt32(this.GridView_VacantesActivas.Rows[this.GridView_VacantesActivas.SelectedIndex].Cells[1].Text));

                this.Response.Redirect("Vacantes.aspx");
            }
            catch (Exception)
            {
                this.Label_MensajeErrorCerrarVacante.Visible = true;
            }
        }
        protected void Button_ReabrirVacante_Click(object sender, EventArgs e)
        {
            try
            {
                ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).ActivarVacante(Convert.ToInt32(this.GridView_VacantesCerradas.Rows[this.GridView_VacantesCerradas.SelectedIndex].Cells[1].Text));

                this.Response.Redirect("Vacantes.aspx");
            }
            catch (Exception)
            {
                this.Label_MensajeErrorReabrirVacante.Visible = true;
            }
        }

        protected void Button_NuevaHabilidad_Click(object sender, EventArgs e)
        {
            try
            {
                Habilidad NuevaHabilidad = new Habilidad(TextBox_NuevaHabilidad.Text);
                NuevaHabilidad.Insertar();
                Label_MensajeErrorNuevaHabilidad.Visible = false;
                this.Response.Redirect("Vacantes.aspx");
            }
            catch (Exception NHab)
            {
                Label_MensajeErrorNuevaHabilidad.Visible = true;
            }
        }
        protected void Button_EliminarHabilidad_Click(object sender, EventArgs e)
        {
            try
            {
                int IndiceHabilidadAEliminar = 0;
                string ValueAEliminar = "";

                foreach (var item in HabilidadesNuevaVacante)
                {
                    if (item.ID == System.Convert.ToInt32(DropDownList_HabilidadesDeVacante.SelectedValue))
                    {
                        IndiceHabilidadAEliminar = HabilidadesNuevaVacante.IndexOf(item);
                        ValueAEliminar = DropDownList_HabilidadesDeVacante.SelectedValue;
                    }
                }

                HabilidadesNuevaVacante.RemoveAt(IndiceHabilidadAEliminar);
                TextBox_HabilidadesVacanteNueva.Text = "";
                DropDownList_HabilidadesDeVacante.Items.Remove(DropDownList_HabilidadesDeVacante.Items.FindByValue(ValueAEliminar));
                //.Clear();
                //System.Web.UI.WebControls.ListItem Item0 = new ListItem("[Seleccione una habilidad]", "0");
                //DropDownList_HabilidadesDeVacante.Items.Add(Item0);
                //foreach (ListItem litem in DropDownList_HabilidadesDeVacante.Items)
                //{
                //    if (litem.Value == ValueAEliminar) IndiceHabilidadAEliminar = System.Convert.ToInt32(ValueAEliminar);
                //}

                foreach (var item in HabilidadesNuevaVacante)
                {
                    //DropDownList_HabilidadesDeVacante.Items.Add(new ListItem(item.Descripcion, System.Convert.ToString(item.ID)));
                    TextBox_HabilidadesVacanteNueva.Text = TextBox_HabilidadesVacanteNueva.Text + item.Descripcion + "\n";
                }
                if (DropDownList_HabilidadesDeVacante.Items.Count == 1) Button_EliminarHabilidad.Enabled = false;
                Label_MensajeErrorHabilidadEliminar.Visible = false;
            }
            catch (Exception EHab)
            {
                Label_MensajeErrorHabilidadEliminar.Visible = true;
            }
            finally
            {
                Button_EliminarHabilidad.Enabled = false;
            }
        }

        protected void Button_AñadirHabilidad_Click(object sender, EventArgs e)
        {
            bool YaEsta = false;

            foreach (Habilidad item in Vacantes.HabilidadesNuevaVacante)
            {
                if (item.Descripcion == this.DropDownList_Habilidades.SelectedItem.Text)
                {
                    YaEsta = true;
                    break;
                }
            }

            if (YaEsta)
            {
                Label_MensajeErrorHabilidadExistente.Visible = true;
            }
            else
            {
                Vacantes.HabilidadesNuevaVacante.Add(new Habilidad(Convert.ToInt32(this.DropDownList_Habilidades.SelectedValue)));
                Label_MensajeErrorHabilidadExistente.Visible = false;

                //this.PoblarTextBox_HabilidadesVacanteNueva();
                //this.PoblarDropDownList_HabilidadesDeVacante();

                //shit! is this the only fucking way?
                this.Response.Redirect("Vacantes.aspx");   
            }
            //try
            //{
            //    bool YaEsta = false;
            //    Habilidad NuevaHabilidad = new Habilidad(Convert.ToInt32(DropDownList_Habilidades.SelectedValue));

            //    foreach (var item in HabilidadesNuevaVacante)
            //    {
            //        if (item.ID == NuevaHabilidad.ID) YaEsta = true;
            //    }
            //    if (!YaEsta)
            //    {
            //        HabilidadesNuevaVacante.Add(NuevaHabilidad);
            //        //this.Response.Redirect("Vacantes.aspx");
            //        TextBox_HabilidadesVacanteNueva.Text = TextBox_HabilidadesVacanteNueva.Text + NuevaHabilidad.Descripcion + "\n";
            //        DropDownList_HabilidadesDeVacante.Items.Add(new ListItem(NuevaHabilidad.Descripcion, System.Convert.ToString(NuevaHabilidad.ID)));
            //        Label_MensajeErrorHabilidadExistente.Visible = false;
            //    }
            //    else Label_MensajeErrorHabilidadExistente.Visible = true;
            //}
            //catch (Exception AHab)
            //{
            //    Label_MensajeErrorHabilidadExistente.Visible = true;
            //}
        }
        protected void Button_PublicarVacante_Click(object sender, EventArgs e)
        {
            Vacante NuevaVacante = new Vacante(((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.ID,
                                                 TextBox_DescripcionVacanteNueva.Text,
                                                 Convert.ToInt32(DropDownList_Carreras.SelectedValue));

            NuevaVacante.Habilidades = HabilidadesNuevaVacante;
            NuevaVacante.Insertar();
            //NuevaVacante.InsertarRelaciones();
            NuevaVacante.EncontrarSolicitantes();
        }

        protected void GridView_VacantesActivas_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Label_HabilidadesRequeridasVacantesActivas.Visible = true;
            this.TextBox_HabilidadesRequeridasVacantesActivas.Visible = true;
            this.Button_VerAplicacionesDeVacante.Enabled = true;
            this.Button_CerrarVacante.Enabled = true;

            PoblarTextBox_HabilidadesRequeridasVacantesActivas();
        }
        protected void GridView_VacantesCerradas_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Label_HabilidadesRequeridasVacantesCerradas.Visible = true;
            this.TextBox_HabilidadesRequeridasVacantesCerradas.Visible = true;
            this.Button_ReabrirVacante.Enabled = true;

            PoblarTextBox_HabilidadesRequeridasVacantesCerradas();
        }
        protected void DropDownList_HabilidadesDeVacante_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.DropDownList_HabilidadesDeVacante.SelectedValue != "0") Button_EliminarHabilidad.Enabled = true;
            else Button_EliminarHabilidad.Enabled = false;
        }

        protected void DropDownList_Carreras_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.TextBox_DescripcionVacanteNueva.Text.Trim() != "")
            {
                this.Button_PublicarVacante.Enabled = true;
            }
            if (this.DropDownList_Carreras.SelectedValue == "0")
            {
                this.Button_PublicarVacante.Enabled = false;
            }
        }
        protected void TextBox_DescripcionVacanteNueva_TextChanged(object sender, EventArgs e)
        {
            if (this.DropDownList_Carreras.SelectedValue != "0")
            {
                this.Button_PublicarVacante.Enabled = true;
            }
            if (this.TextBox_DescripcionVacanteNueva.Text.Trim() == "")
            {
                this.Button_PublicarVacante.Enabled = false;
            }
        }
        protected void DropDownList_Habilidades_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.DropDownList_Habilidades.SelectedValue != "0") Button_AñadirHabilidad.Enabled = true;
            else Button_AñadirHabilidad.Enabled = false;
        }

        protected void TextBox_NuevaHabilidad_TextChanged(object sender, EventArgs e)
        {
            if (this.TextBox_NuevaHabilidad.Text != "") Button_NuevaHabilidad.Enabled = true;
            else Button_NuevaHabilidad.Enabled = false;
        }

        private void PoblarGridView_VacantesActivas()
        {
            var VacantesSource = from v in ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Vacantes
                                 where v.SiActiva == true
                                 select new
                                 {
                                     ID = v.ID,
                                     Descripcion = v.Descripcion,
                                     FechaPublicacion = v.FechaPublicacion,
                                     Carrera = v.Carrera.Descripcion,
                                     Empresa = v.Publicante.Nombre
                                 };

            if (VacantesSource.Count() == 0)
            {
                //Lo ideal seria poner la propiedad Visible = true. pero asp se pajarea
                this.Label_MensajeErrorNoVacantesActivas.Text = "Su empresa no tiene vacantes activas";
                return;
            }
            else
            {
                this.Label_MensajeErrorNoVacantesActivas.Text = "";
            }

            //this.GridView_Vacantes.DataSource = BolsaTalentos.BLL.Vacante.GetAllVacantes();
            this.GridView_VacantesActivas.DataSource = VacantesSource;
            this.GridView_VacantesActivas.DataBind();
            //this.HideUnwantedColumns();          // this shit just wont work!
        }
        private void PoblarGridView_VacantesCerradas()
        {
            var VacantesSource = from v in ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Vacantes
                                 where v.SiActiva == false
                                 select new
                                 {
                                     ID = v.ID,
                                     Descripcion = v.Descripcion,
                                     FechaPublicacion = v.FechaPublicacion,
                                     Carrera = v.Carrera.Descripcion,
                                     Empresa = v.Publicante.Nombre
                                 };

            if (VacantesSource.Count() == 0)
            {
                //Lo ideal seria poner la propiedad Visible = true. pero asp se pajarea
                this.Label_MensajeErrorNoVacantesCerradas.Text = "Su empresa no tiene vacantes cerradas";
                return;
            }
            else
            {
                this.Label_MensajeErrorNoVacantesCerradas.Text = "";
            }

            //this.GridView_Vacantes.DataSource = BolsaTalentos.BLL.Vacante.GetAllVacantes();
            this.GridView_VacantesCerradas.DataSource = VacantesSource;
            this.GridView_VacantesCerradas.DataBind();
            //this.HideUnwantedColumns();          // this shit just wont work!
        }
        private void PoblarTextBox_HabilidadesRequeridasVacantesActivas()
        {
            Vacante TempVac = new Vacante(Convert.ToInt32(this.GridView_VacantesActivas.Rows[this.GridView_VacantesActivas.SelectedIndex].Cells[1].Text));

            this.TextBox_HabilidadesRequeridasVacantesActivas.Text = "";
            foreach (Habilidad item in TempVac.Habilidades)
            {
                this.TextBox_HabilidadesRequeridasVacantesActivas.Text += (item.Descripcion + "\n");
            }
        }
        private void PoblarTextBox_HabilidadesRequeridasVacantesCerradas()
        {
            Vacante TempVac = new Vacante(Convert.ToInt32(this.GridView_VacantesCerradas.Rows[this.GridView_VacantesCerradas.SelectedIndex].Cells[1].Text));

            this.TextBox_HabilidadesRequeridasVacantesCerradas.Text = "";
            foreach (Habilidad item in TempVac.Habilidades)
            {
                this.TextBox_HabilidadesRequeridasVacantesCerradas.Text += (item.Descripcion + "\n");
            }
        }

        protected void PoblarDropDownList_HabilidadesDeVacante()
        {
            if (this.DropDownList_HabilidadesDeVacante.Items.Count == 1)
            {
                foreach (Habilidad item in Vacantes.HabilidadesNuevaVacante)
                {
                    this.DropDownList_HabilidadesDeVacante.Items.Add(new ListItem(item.Descripcion, item.ID.ToString()));
                }
            }
        }
        protected void PoblarTextBox_HabilidadesVacanteNueva()
        {
            this.TextBox_HabilidadesVacanteNueva.Text = "";
            foreach (Habilidad item in Vacantes.HabilidadesNuevaVacante)
            {
                this.TextBox_HabilidadesVacanteNueva.Text += item.Descripcion + "\n";
            }
        }

        protected void Button_MostrarPanelVacantesActivas_Click(object sender, EventArgs e)
        {
            this.Panel_VacantesActivas.Visible = !(this.Panel_VacantesActivas.Visible);
        }
        protected void Button_MostrarVacantesCerradas_Click(object sender, EventArgs e)
        {
            this.Panel_VacantesCerradas.Visible = !(this.Panel_VacantesCerradas.Visible);
        }
        protected void Button_MostrarPanelNuevaVacante_Click(object sender, EventArgs e)
        {
            this.Panel_NuevaVacante.Visible = !(this.Panel_NuevaVacante.Visible);
        }


    }
}
